const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

// 跟踪连接的客户端数量
let clientCount = 0;

console.log('WebSocket服务器已启动，监听端口 8080');

wss.on('connection', (ws) => {
    // 客户端连接计数
    clientCount++;
    console.log(`新客户端连接，当前在线: ${clientCount} 人`);
    
    // 向所有客户端广播用户上线消息
    broadcast(`有新用户加入聊天，当前在线: ${clientCount} 人`);
    
    // 处理收到的消息
    ws.on('message', (data) => {
        try {
            // 确保数据是字符串格式
            const message = data.toString();
            console.log(`收到消息: ${message}`);
            
            // 广播消息给所有客户端
            broadcast(message);
        } catch (error) {
            console.error('处理消息错误:', error);
        }
    });
    
    // 客户端断开连接
    ws.on('close', () => {
        clientCount--;
        console.log(`客户端断开连接，当前在线: ${clientCount} 人`);
        
        // 向所有客户端广播用户下线消息
        broadcast(`有用户离开聊天，当前在线: ${clientCount} 人`);
    });
    
    // 处理错误
    ws.on('error', (error) => {
        console.error('WebSocket错误:', error);
    });
});

// 广播消息给所有连接的客户端
function broadcast(message) {
    wss.clients.forEach((client) => {
        if (client.readyState === WebSocket.OPEN) {
            // 确保发送的是字符串，避免发送Blob导致前端显示问题
            client.send(message.toString());
        }
    });
}
